package com.cskaoyan.javase.oop1._13block._1building;

/**
 * 构造代码块
 * 什么是构造代码块 ？
 * 定义在类的成员位置，使用以下声明方式声明的代码块，称之为构造代码块。
 * //成员位置
 * {
 *   // 局部位置
 * }
 * //成员位置
 *
 * 作用: 随着构造器的执行的执行,它的作用同样是在new对象过程中,给成员变量赋值
 *      在构造代码块当中,和成员方法类似,也存在this传参,可以使用this关键字
 *
 * 下面,我们先研究在new对象过程中,目前学过的赋值手段:
 *      1.默认初始化具有默认值(最先执行)
 *      2.构造器赋值(最后执行)
 *      3.显式赋值
 *      4.构造代码块赋值
 * 显式赋值和构造代码块赋值谁先谁后执行呢?
 * 通过测试,我们发现,显式赋值和构造代码块赋值是按照代码的书写顺序,从上到下执行
 *
 * @since 17:19
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.age);

        Student s2 = new Student(88);
        System.out.println(s2.age);
    }
}

class Student {
    // 定义在成员位置的构造代码块
    {
        // 可以使用this关键字
        this.age = 28;
    }

    int age = 18;

    public Student() {
    }

    public Student(int age) {
        this.age = age;
    }
}
